import frappe

def after_install():
    """EAM安装后处理：简单版本"""
    print("🚀 EAM应用安装完成")
    
    try:
        # 更新EAM工作空间的顺序和图标（app=eam）
        update_eam_workspace()
        print("✅ EAM工作空间配置已更新")
    except Exception as e:
        print(f"⚠️ 工作空间配置更新失败: {str(e)}")

    # 将工作空间复制/同步到 ERPNext（app=erpnext，name=eamcopy，标签与标题为“设备管理”）
    try:
        ensure_erpnext_workspace()
        print("✅ 已同步 EAM 工作空间到 ERPNext（eamcopy）")
    except Exception as e:
        print(f"⚠️ 同步到 ERPNext 失败: {str(e)}")

def update_eam_workspace():
    """更新EAM工作空间配置"""
    try:
        # 查找EAM工作空间
        workspace_name = frappe.db.get_value("Workspace", {"app": "eam"}, "name")
        
        if workspace_name:
            # 更新工作空间
            frappe.db.set_value("Workspace", workspace_name, {
                "sequence_id": 10.5,
                "icon": "getting-started"
            })
            frappe.db.commit()
            print(f"✅ 已更新工作空间: {workspace_name}")
        else:
            print("⚠️ 未找到EAM工作空间")
            
    except Exception as e:
        print(f"❌ 更新工作空间失败: {str(e)}")


def ensure_erpnext_workspace():
    """将 EAM 的工作空间全量复制到 ERPNext 名下，目标名称为 'eamcopy'
    
    全量覆盖策略：
    - 若 ERPNext(app=erpnext) 下 name=eamcopy 存在：先删除该 Workspace，再重建
    - 若不存在：直接创建
    - 标签与标题强制设为“设备管理”
    """
    # 查找源工作空间（app=eam）
    src_name = frappe.db.get_value("Workspace", {"app": "eam"}, "name")
    if not src_name:
        print("ℹ️ 未找到源 EAM 工作空间（app=eam），跳过复制")
        return

    target_name = "eamcopy"
    # 读取源文档
    src = frappe.get_doc("Workspace", src_name)

    # 需要复制/同步的字段清单（避免复制系统字段）
    fields_to_copy = [
        "content", "shortcuts", "links", "charts", "number_cards",
        "icon", "public", "sequence_id"
    ]

    # 如已存在目标或冲突名称，先删除以确保全量覆盖不留残留字段
    for name in [target_name, "设备管理"]:
        if frappe.db.exists("Workspace", {"name": name, "app": "erpnext"}):
            try:
                frappe.delete_doc("Workspace", name, ignore_permissions=True)
                frappe.db.commit()
                print(f"🗑️ 已删除 ERPNext 下可能冲突的工作空间: {name}")
            except Exception as e:
                print(f"❌ 删除冲突工作空间失败: {name}, 原因: {str(e)}")
                return

    # 重建目标 Workspace（先插入，再强制重命名，避免 autoname 把 name 设成标题）
    data = {k: getattr(src, k, None) for k in fields_to_copy}
    data.update({
        "app": "erpnext",
        "module": "Setup",
        "parent_page": "",
        "label": "设备管理",
        "title": "设备管理",
        "icon": "getting-started",
        "public": 1
    })

    doc = frappe.new_doc("Workspace")
    for k, v in data.items():
        setattr(doc, k, v)

    # 插入后如 name 不是 'eamcopy'，则重命名为 'eamcopy'，确保 URL 为 /app/eamcopy
    doc.insert(ignore_permissions=True)
    frappe.db.commit()
    if doc.name != target_name:
        # 极端情况若已存在同名，先删除旧的再重命名
        if frappe.db.exists("Workspace", {"name": target_name, "app": "erpnext"}):
            frappe.delete_doc("Workspace", target_name, ignore_permissions=True)
            frappe.db.commit()
        frappe.rename_doc("Workspace", doc.name, target_name, force=True)
        frappe.db.commit()
    print(f"✅ 已全量重建 ERPNext 工作空间: {target_name}")